package leecode;

import java.util.HashSet;
import java.util.Set;

/**
 * @Classname
 * @Description TODO
 * @Date 2021/7/22 20:48
 * @Created by Alberthch
 *
 * 题目：宝石与石头
 * 题目描述：给定字符串J代表石头中宝石的类型，和字符串S代表你拥有的石头。S中每个字符代表了一种你拥有的石头的类型，你想知道你拥有的石头中有多少是宝石。
 *         J中的字母不重复，J和S中的所有字符都是字母。字母区分大小写，因此"a"和"A"是不同类型的石头。
 *
 * 解答：就是一个简单的字符匹配，看S中字符有多少是J中出现的
 */
class Solution_771 {
    public static int numJewelsInStones(String jewels, String stones) {
        int num = 0;
        String temp = "";
        for (int i=0; i<stones.length(); i++) {
            temp = String.valueOf(stones.charAt(i));
            // contains函数只接受CharSequence参数，CharSequence类和String类都可以定义字符串，但是String定义的字符串只能读，CharSequence定义的字符串是可读可写的
            // 像String、StringBuffer、StringBuilder类都是CharSequence的子接口；
            if (jewels.contains(temp)) {
                num++;
            }
        }

        return num;

    }

    // 方法2：使用哈希表
    public int numJewelsInStonesLeecode(String jewels, String stones) {
        int jewelsCount = 0;
        Set<Character> jewelsSet = new HashSet<Character>();
        int jewelsLength = jewels.length(), stonesLength = stones.length();
        for (int i = 0; i < jewelsLength; i++) {
            char jewel = jewels.charAt(i);
            jewelsSet.add(jewel);
        }
        for (int i = 0; i < stonesLength; i++) {
            char stone = stones.charAt(i);
            if (jewelsSet.contains(stone)) {
                jewelsCount++;
            }
        }
        return jewelsCount;
    }


    public static void main(String[] args) {
        String J = "aA";
        String S = "aAAbbbb";
        System.out.println(numJewelsInStones(J,S));
    }
}
